package com.feicheng.house.controller;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.feicheng.house.entity.Role;
import com.feicheng.house.exception.SystemException;
import com.feicheng.house.mapper.RoleMapper;
import com.feicheng.house.result.ResultInfo;
import com.feicheng.house.service.IRoleService;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author feichengTech
 * @since 2021-10-30
 */
@RestController
@RequestMapping("/house/role")
public class RoleController {


	@Autowired
	RoleMapper roleMapper;
	
	
	@GetMapping("/test")
	public ResultInfo testRole() {
		return ResultInfo.success(roleMapper.selectList(null));
	}
	

	@Autowired
	IRoleService roleService;
	

	/**
	 * ロールIDに基づいてロールを削除する
	 * @param roleId
	 * @return
	 */
	@DeleteMapping("/info")
	@Transactional
	public ResultInfo deleteRole(Integer roleId) {

		if (null == roleId) {
			throw new SystemException("角色ID缺失");
		}
		return ResultInfo.success(roleService.deleteRole(roleId));
	}
	
	/**
	 * ロールと対応する権限を追加する
	 * @param role
	 * @param permissions
	 * @return　追加操作は成功したか
	 */
	@PostMapping("/info")
	@Transactional
	public ResultInfo addRole(Role role, String permissions) {
		if (null != role.getRoleId()) {
			throw new SystemException("角色基础数据出错");
		}
		
		return ResultInfo.success(roleService.addRole(role, permissions));
	}
	
	/**
	 * ロールと対応する権限を更新する
	 * @param role
	 * @param permissions
	 * @return 更新操作は成功したか
	 */
	@PutMapping("/info")
	@Transactional
	public ResultInfo updateRole(Role role, String permissions) {
		if (null == role.getRoleId()) {
			throw new SystemException("角色ID缺失");
		}
		return ResultInfo.success(roleService.updateRole(role, permissions));
	}
	
	/**
	 * ロールIDに基づいてロールと対応数する権限IDを検索する
	 * @param roleId
	 * @return 検索されたロール
	 */
	@GetMapping("/info")
	public ResultInfo getRoleById(Integer roleId) {
		
		if (null == roleId) {
			throw new SystemException("角色ID缺失");
		}
		
		return roleService.getRoleById(roleId);
	}
	
	/**
	 * すべてのロールを検索する
	 * @return 検索されたロール
	 */
	@GetMapping("/all")
	public ResultInfo all() {
		
		return roleService.all();
	}
	
	/**
	 * パラメータに基づいてロールを検索する、パラメータがない場合、すべてのロールを検索する
	 * @param roleName
	 * @param status
	 * @param currentPage
	 * @param pageSize
	 * @return ページ付けされた検索結果
	 */
	@GetMapping("/list")
	public ResultInfo list(
			String roleName,
			Boolean status,
			@RequestParam(defaultValue="1") Integer currentPage,
			@RequestParam(defaultValue="10")Integer pageSize
			) {
		return roleService.list(roleName, status, currentPage, pageSize);
	}
}

